package edu.yonsei.iwb.smarttv.result;

import com.hp.hpl.jena.query.Query;
import java.util.Vector;

/**
 * 온톨로지 검색 결과를 저장하기 위한 클래스로써, 입력된 사용자의 질의와 온톨로지 검색을 위해 생성된 SPARQL 구문, 그리고 질의로부터 순위화 된 검색 결과를 담고 있는 클래스
 * 
 * @author 이명진
 * @version 1.0, 2011.9.8
 */
public class OntSearchResults {

    /**
     * 온톨로지 검색 결과에 대한 사용자 질의
     */
    private String query;
    /**
     * 사용자 질의로부터 생성된 대표 SPARQL
     */
    private Query sparql;
    /**
     * 사용자 질의로부터 생성된 SPARQL 대안 집합
     */
    private Vector<Query> sparqlSet;
    /**
     * 온톨로지 검색 결과 집합
     */
    private Vector<SearchResultSet> srs;

    /**
     * 온톨로지 검색 결과를 생성하기 위한 기본 생성자
     */
    public OntSearchResults() {
        this.query = new String();        
        this.srs = new Vector<SearchResultSet>();
        this.sparqlSet = new Vector<Query>();
    }

    /**
     * 사용자의 질의와 SPARQL, 검색 결과 클래스인 SearchResultSet을 이용하여 온톨로지 검색 결과를 생성하기 위한 생성자
     *
     * @param q 온톨로지 검색 결과에 대한 사용자의 질의
     * @param s 사용자의 질의로부터 생성된 SPARQL
     * @param srs 온톨로지 검색 결과
     */
    public OntSearchResults(String q, Query s, Vector<Query> sparqlSet,Vector<SearchResultSet> srs) {
        this.query = q;
        this.sparql = s;
        this.sparqlSet = sparqlSet;
        this.srs = srs;
    }

    /**
     * 검색 결과에 대한 사용자의 질의를 얻기 위한 메소드
     *
     * @return 사용자의 질의문
     */
    public String getQuery() {
        return this.query;
    }

    /**
     * 검색 결과에 대한 SPARQL 구문을 얻기 위한 메소드
     *
     * @return 사용자의 질의로부터 온토롤지 검색을 위해 생성된 SPARQL 구문을 반환
     */
    public Query getSPARQL() {
        return this.sparql;
    }
    
    public Vector<Query> getCandidateSPARQL(){
        return this.sparqlSet;
    }
    

    /**
     * 전체 검색 결과를 얻기 위한 메소드
     *
     * @return 검색 결과에 대해 SearchResultSet 클래스를 Vector 형태로 반환
     */
    public Vector<SearchResultSet> getSearchResultSet() {
        return this.srs;
    }

    /**
     * 검색 결과에 대한 개수를 반환하는 메소드
     *
     * @return 검색 결과의 개수
     */
    public int sizeOfSearchResults() {
        return this.srs.size();
    }

    /**
     * 지정된 인덱스의 검색 결과를 얻기 위한 메소드
     *
     * @param i 검색 결과를 얻기 위한 인덱스
     * @return i 번째 검색 결과를 SearchResultSet 객체로 반환
     */
    public SearchResultSet getSearchResult(int i) {
        return this.srs.get(i);
    }

    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("::::: Ontology Search Result:\n");
        sb.append("User Query String: " + this.query + "\n");
        sb.append("Generated SPARQL:\n" + this.sparql + "\n");
        sb.append("Search Result:\n" + this.srs.toString() + "\n");
        sb.append("Number of Search Result: " + this.srs.size());
        return sb.toString();
    }

}
